## 4.5. Shells

As we said before, logging in to the system puts you into a shell (or a graphical interface if your system is configured to use a display manager). So does opening an `xterm` window in X. The shell interprets and executes all your commands. Let's look a bit at different shells before we keep going, because they're going to affect some of the material coming up.

If it seems confusing that Unix offers many different shells, just accept it as an effect of evolution. Believe us, you wouldn't want to be stuck using the very first shell developed for Unix, the Bourne shell. While it was a very powerful user interface for its day (the mid-1970s), it lacked a lot of useful features for interactive use--including the ones shown in this section. So other shells have been developed over time, and you can now choose the one that best suits your way of working.

Some of the shells available on Linux are:

`bash`

  Bourne Again shell. The most commonly used (and most powerful) shell on Linux. POSIX-compliant, compatible with Bourne shell, created and distributed by the GNU project (Free Software Foundation). Offers command-line editing, history substitution, and Bourne Shell compatibility.

`csh`

  C shell. Developed at Berkeley. Mostly compatible with the Bourne shell for interactive use, but has a very different interface for programming. Does not offer command-line editing, although it does have a sophisticated alternative called history substitution.

`ksh`

  Korn shell. Perhaps the most popular on Unix systems generally, and the first to introduce modern shell techniques (including some borrowed from the C shell) into the Bourne shell. Compatible with Bourne shell. Offers command-line editing.

`sh`

  Bourne shell. The original shell. Does not offer command-line editing.

`tcsh`

  Enhanced C shell. Offers command-line editing.

`zsh`

  Z shell. The newest of the shells. Compatible with Bourne shell. Offers command-line editing.

Try the following command to find out what your shell is. It prints out the full pathname where the shell is located. Don't forget to type the dollar sign:

>     $ echo $SHELL

You are probably running `bash`, the Bourne Again Shell. If you're running something else, this might be a good time to change to `bash`. It's powerful, POSIX-compliant, well-supported, and very popular on Linux. Use the `chsh` command to change your shell:

>     $ chsh
>     Enter password: Type your password here--this is for security's sake
>     Changing the login shell for kalle
>     Enter the new value, or press return for the default

>             Login Shell [/bin/sh]:/bin/bash

Before a user can choose a particular shell, that shell must be installed and the system administrator must make it available by entering it in /etc/shells.

There are a couple of ways to conceptualize the differences between shells. One is to distinguish Bourne-compatible shells from `csh`-compatible shells. This will be of interest to you when you start to program with the shell, also known as writing shell scripts. The Bourne shell and C shell have different programming constructs. Most people now agree that Bourne-compatible shells are better, and there are many Unix utilities that recognize only the Bourne shell.

Another way to categorize shells is to identify those that offer command-line editing (all the newer ones) versus those that do not. `sh` and `csh` lack this useful feature.

When you combine the two criteria--being compatible with the Bourne shell and offering command-line editing--your best choice comes down to `bash`, `ksh`, or `zsh`. Try out several shells before you make your choice; it helps to know more than one, in case someday you find yourself on a system that limits your choice of shells.

Copyright © 2001 O'Reilly & Associates. All rights reserved.